package com.vk.project.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vk.project.common.DeleteRequest;
import com.vk.project.common.IdRequest;
import com.vk.project.model.dto.interfaceinfo.InterfaceInfoInvokeRequest;
import com.vk.project.model.dto.interfaceinfo.InterfaceInfoQueryRequest;
import com.vk.project.model.vo.InterfaceInfoVO;
import com.vk.vkapicommon.model.entity.InterfaceInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;

/**
 * @ClassName : InterfaceInfoService
 * @Description : 接口信息操作接口
 * @Author : LYQ
 * @Date: 2023-11-23 22:07:58
 */
public interface InterfaceInfoService extends IService<InterfaceInfo> {


    /**
     * 删除接口信息
     *
     * @param deleteRequest 删除请求对象
     * @param request       请求体
     * @return
     */
    Boolean deleteInterfaceInfo(DeleteRequest deleteRequest, HttpServletRequest request);

    /**
     * 校验接口
     *
     * @param interfaceInfo 接口信息对象
     * @param add           是否为创建校验
     */
    void validInterfaceInfo(InterfaceInfo interfaceInfo, boolean add);

    /**
     * 下线接口
     *
     * @param idRequest 接口ID
     * @param request   请求体
     * @return 返回执行结果
     */
    boolean offLineInterface(IdRequest idRequest, HttpServletRequest request);

    /**
     * 上线接口
     *
     * @param interfaceInfoInvokeRequest 要上线的接口对象
     * @param request                    请求体
     * @return 返回执行结果
     */
    boolean onLineInterface(InterfaceInfoInvokeRequest interfaceInfoInvokeRequest, HttpServletRequest request);

    /**
     * 条件查询接口信息
     *
     * @param interfaceInfoQueryRequest 查询条件
     * @param request                   请求体
     * @return 返回接口信息列表
     */
    Page<InterfaceInfoVO> listInterfaceInfoByPage(InterfaceInfoQueryRequest interfaceInfoQueryRequest, HttpServletRequest request);

    /**
     * 接口调用
     *
     * @param interfaceInfoInvokeRequest 接口调用请求体
     * @param request 请求体
     * @param oldInterfaceInfo 接口对象信息
     * @return 返回调用结果
     */
    String getInvokeResult(InterfaceInfoInvokeRequest interfaceInfoInvokeRequest, HttpServletRequest request, InterfaceInfo oldInterfaceInfo);
}
